package com.msblearn.C_003;

import java.sql.Time;
import java.time.temporal.ValueRange;
import java.util.concurrent.TimeUnit;

/**
 * volatile让一个变量在多个线程中可见：线程的可见性
 *
 * 下面的内容的测试volatile的可见性
 * volatitle两个作用：
 * 保证线程可见性:一个线程改变了一个公共变量的值，会马上刷新到主存中。保证其他线程马上能看到并从主存中重新加载。
 * 禁止指令重排序（和CPU有关系）
 *      DCL单例
 *      double check
>>>>>>> Stashed changes
 *
 *
 */
public class C001_Volatile {

    private static volatile boolean isRunning = true;

    public void run(){
        System.out.println("m method start!");
        while (isRunning){

        }
        System.out.println("m method end!");
    }

    public static void main(String[] args) {
        C001_Volatile v = new C001_Volatile();
        //启动一个新的线程调用run方法
        new Thread(v::run,"t1").start();

        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("isRunning is Change!");
        isRunning = false;
    }
}
